package com.fs.leetcode.shuzu.sum;

import java.util.HashMap;
import java.util.Map;

/**
 * 两数之和
 * @author huyunqiang
 * @Date 2020/5/13 21:26
 */

public class TwoNum {

    /**
     * 输出指定两数之和下标
     * 分析：
     *  定义一个map  k=数组之，v=下表
     * @param arrs
     * @param target
     * @return
     */
    public static int[] getNum(Integer target){

        int[] nums = {2,7,11,15};
        Map<Integer,Integer> map = new HashMap();
        for(int i = 0;i<nums.length;i++){
           if(map.containsKey(target-nums[i])){
              return new int[]{map.get(target-nums[i]),i};
           }

           map.put(nums[i],i);
        }
        throw new IllegalArgumentException("No two sum solution");
    }

    /**
     * 已经排好序的数组用双指针发
     * 给定一个已按照升序排列 的有序数组，找到两个数使得它们相加之和等于目标数。
     * 函数应该返回这两个下标值 index1 和 index2，其中 index1 必须小于 index2。
     * 思路：双指针发
     * @param target
     * @return
     */
    public static int[] getNumShunxu(Integer target){
        int[] nums = {2,7,11,15};
        int left = 0;
        int right = nums.length-1;
        int sum = 0;
        for(int i = 0;i<nums.length;i++){
            sum = nums[left]+nums[right];
            if(target == sum){
                System.out.println((left+1)+"=="+(right+1));
                return new int[]{left+1,right+1};
            }

            if(sum > target){
                right --;

            }else {
                left ++;
            }
        }

        return new int[]{-1,-1};

    }



    public static void main(String[] args) {
//        System.out.println(getNum(9));
        System.out.println(getNumShunxu(9));
    }
}
